package com.lmy.springboot.controller;

import com.lmy.springboot.exception.AccessException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

/**
 * 该控制器主要存放一些访问异常的方法，当发生异常时，会采取默认异常机制处理(主要通过状态码来定义要返回的viewName)
 * 如果自定义了全局异常处理类，则优先按照全局异常来处理(通过异常类型来处理)
 */
@Controller
public class MyErrorController {

    /**
     * 模拟一个服务器内部错误500
     * @return
     */
    @GetMapping("/err")
    public String err() {
        int i = 1 / 0;  //算数异常
        return "manage";
    }

    /**
     * 模拟客户端使用get请求方式 请求/err2，出现4xx客户端错误
     * @return
     */
    @PostMapping(value = "/err2")
    public String err2() {
        return "manage";
    }

    /**
     * 编写方法，触发自定义的异常AccessException
     * 如果没有将自定义异常放入全局异常处理类，那么发生异常时还会使用默认异常处理机制(AccessException返回的状态码403，所以先找有没有403.html，如果没有就再找4xx.html，如果还是没有就使用默认页面)
     * @return
     */
    @GetMapping(value = "/err3")
    public String err3(String name) {
        if (!"tom".equals(name)) {
            throw new AccessException();
        }
        return "manage";
    }
}
